package cn.leftsite.java11;

import java.util.stream.Stream;

/**
 * 流的处理
 * 1. 创建流
 * 2. 中间操作
 * 3. 终止操作
 */
public class StreamDemo {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
        stream.forEach(System.out::println);

        System.out.println("*******************");

        // null 会被解析为一个数组对象
        // Stream.of(null).forEach(System.out::println);

        System.out.println("*******************");

        // 可以传入  null 创建空的流
        Stream.ofNullable(null).forEach(System.out::println);

        System.out.println("*******************");


        // 新方法  takeWhile, dropWhile
        //takeWhile 从流中一直获取判断器元素，一旦遇到判定为假，就终止处理
        Stream.of(3, 9, 20, 22, 40).takeWhile(t -> t % 2 != 0).forEach(System.out::println);

        //dropWhile 从流中一直丢弃判断器元素，一旦遇到判定为假，就终止处理
        Stream.of(3, 9, 20, 22, 40).dropWhile(t -> t % 2 != 0).forEach(System.out::println);

        // 创建迭代流
        Stream.iterate(1, t -> t * 2).limit(10).forEach(System.out::println);


        // 有限的迭代
        Stream.iterate(1, t -> t < 2000, t -> t * 2).forEach(System.out::println);
    }


}
